import { http } from "@/utils/http";

// 充值卡数据类型定义（根据API文档2.1充值卡列表）
export interface MemberCard {
  l_id: string; // 记录ID
  l_cardno: string; // 卡号
  c_name: string; // 折扣卡名
  l_mid: string; // 会员ID
  m_name: string; // 会员名称
  m_mobile: string; // 手机号
  l_price: string; // 折扣卡面值
  l_balance: string; // 折扣卡余额
  l_status: string; // 0 未支付 1支付完成 2 钱已用完 3 卡作废 4支付失败
  l_ctime: string; // 下单时间
  l_paytime: string; // 付款时间
  l_orderno: string; // 订单号
  l_paystr: string; // 支付流水号
  l_remark: string; // 备注
  l_payment_method: string; // 收款方式
  l_employee: string; // 员工
}

// 充值卡搜索参数类型
export interface MemberCardSearchParams {
  keys?: string; // 关键字查询（手机号末尾）
  page?: number; // 页码
  num?: number; // 每页数量
}

// 充值卡流水记录类型定义（根据API文档3.2充值卡流水列表）
export interface MemberCardTransaction {
  l_id: string; // 记录ID
  l_pretotal: string; // 变更前卡上金额
  l_amount: string; // 变更金额
  l_aftertotal: string; // 变更后金额
  l_type: string; // 操作类型 1 前端操作，2后端操作
  l_remark: string; // 备注
  l_ctime: string; // 时间
  l_cardno: string; // 卡号
  l_no: string | null; // 关联订单号
  l_pname: string | null; // 关联订单项目名称
  type_txt: string; // 操作类型文本显示
}

// 充值卡流水列表参数类型
export interface MemberCardTransactionParams {
  cid?: number; // 卡ID（可选）
}

// 充值卡流水列表返回数据类型
export interface MemberCardTransactionListData {
  pages: number; // 总页数
  list: MemberCardTransaction[]; // 流水记录列表
}

// 折扣卡类型定义（根据API文档3.1折扣卡列表）
export interface DiscountCard {
  c_id: string; // 卡ID
  c_name: string; // 卡名称
  c_price: string; // 面值
  c_discount: string; // 折扣 0.65
  c_sort: string; // 前端排序
  c_status: string; // 状态 1上架 0下架
  c_nums: string; // 售出数量
  c_pic: string; // 图片链接
  c_ctime: string; // 记录创建时间
  c_uptime: string; // 记录修改时间
}

// 收款方式类型定义
export interface PaymentMethod {
  [key: string]: string; // 1: "支付宝(公)", 2: "微信(公)", 3: "支付宝（王）", 4: "私微信(王)"
}

// 会员信息类型定义（根据API文档2.5获取会员信息）
export interface MemberInfo {
  m_id: string; // 会员ID
  m_name: string; // 会员名称
  m_mobile: string; // 手机号
  mobile_val: string; // 手机号码展示值
}

// 新开充值卡参数类型（根据API文档2.4新开充值卡）
export interface NewCardParams {
  mid: number; // 会员ID
  cid: number; // 折扣卡ID
  payment_method: number; // 收款方式
  employee: string; // 员工名称
  remark: string; // 备注
  amount?: number; // 充值金额（可选，默认为0）
}

// API返回结果类型
export interface ApiResult<T = any> {
  code: number; // 状态码：1 成功
  msg: string; // 描述
  data: T; // 数据
}

// 充值卡列表返回数据类型
export interface MemberCardListData {
  pages: number; // 总页数
  list: MemberCard[]; // 充值卡列表
}

/** 获取充值卡列表（根据API文档2.1充值卡列表） */
export const getMemberCardList = (params: MemberCardSearchParams) => {
  return http.request<ApiResult<MemberCardListData>>(
    "post",
    "/admin/membercard.php?act=list",
    {
      data: params
    }
  );
};

/** 获取收款方式（根据API文档2.2收款方式） */
export const getPaymentMethods = () => {
  return http.request<ApiResult<PaymentMethod>>(
    "post",
    "/admin/membercard.php?act=getpayfrom"
  );
};

/** 获取折扣卡列表（根据API文档3.1折扣卡列表） */
export const getDiscountCards = () => {
  return http.request<ApiResult<{ pages: number; list: DiscountCard[] }>>(
    "post",
    "/admin/membercard.php?act=getcards"
  );
};

/** 获取会员信息（根据API文档2.5获取会员信息） */
export const getMemberInfo = (skey: string) => {
  return http.request<ApiResult<MemberInfo[]>>(
    "post",
    "/admin/membercard.php?act=getmember",
    {
      data: { skey }
    }
  );
};

/** 新开充值卡（根据API文档2.4新开充值卡） */
export const createNewCard = (params: NewCardParams) => {
  return http.request<ApiResult<string>>(
    "post",
    "/admin/membercard.php?act=newcards",
    {
      data: params
    }
  );
};

// 余额支付参数类型（根据API文档8.8余额支付）
export interface BalancePaymentParams {
  cid: number; // 折扣卡ID
  oid?: number; // 订单ID（可选，非强制）
  amount: number; // 金额
  remark: string; // 备注（必填）
}

/** 余额支付（根据API文档8.8余额支付） */
export const balancePayment = (params: BalancePaymentParams) => {
  return http.request<ApiResult<string>>(
    "post",
    "/admin/order.php?act=payment",
    {
      data: params
    }
  );
};

/** 充值卡扣款（使用余额支付接口） */
export const deductMemberCard = (params: {
  oid: string;
  cardId: string;
  amount: number;
  remark: string;
  orderTime?: string; // 预约时间（时间戳），用于标识订单
}) => {
  const paymentParams: BalancePaymentParams = {
    oid: parseInt(params.oid),
    cid: parseInt(params.cardId),
    amount: params.amount,
    remark: params.remark
  };

  return balancePayment(paymentParams);
};

/** 获取充值卡流水列表（根据API文档3.2充值卡流水列表） */
export const getMemberCardTransactions = (
  params: MemberCardTransactionParams
) => {
  return http.request<ApiResult<MemberCardTransactionListData>>(
    "post",
    "/admin/membercard.php?act=getcardslog",
    {
      data: params
    }
  );
};

/** 导出充值卡列表数据（根据API文档3.2充值卡列表数据导出） */
export const exportMemberCardData = (params: {
  keys?: string; // 关键字查询
}) => {
  // 直接使用 axios 实例来获取完整的响应对象
  return http.request<any>(
    "post",
    "/admin/membercard.php?act=expdata",
    {
      data: params,
      responseType: "blob"
    },
    {
      beforeResponseCallback: response => {
        // 对于 blob 响应，返回包含 data 和 headers 的对象
        return {
          data: response.data,
          headers: response.headers
        };
      }
    }
  );
};
